using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;

namespace SanJ.FreeCare.Medications
{
    public partial interface IMedicationRepository : IRepository<Medication, Guid>
    {
        Task DeleteAllAsync(
            string? filterText = null,
            string? code = null,
            string? statusCode = null,
            string? keyWord = null,
            string? productName = null,
            string? productNamePY = null,
            string? productNameWB = null,
            string? productNameEN = null,
            string? alias = null,
            string? aliasPY = null,
            string? aliasWB = null,
            string? aliasEN = null,
            string? scientificName = null,
            string? scientificNamePY = null,
            string? scientificNameWB = null,
            string? scientificNameEN = null,
            string? antiLevelCode = null,
            string? antiClassCode1 = null,
            string? antiClassCode2 = null,
            string? anitDDDUnitCode = null,
            decimal? anitDDDValueMin = null,
            decimal? anitDDDValueMax = null,
            decimal? antiOnceMinValueMin = null,
            decimal? antiOnceMinValueMax = null,
            decimal? antiOnceMaxValueMin = null,
            decimal? antiOnceMaxValueMax = null,
            string? antiOnceUnitCode = null,
            int? antiFrequencyMinMin = null,
            int? antiFrequencyMinMax = null,
            int? antiFrequencyMaxMin = null,
            int? antiFrequencyMaxMax = null,
            string? gBCode = null,
            string? typeCode = null,
            string? classCode = null,
            string? feeTypeCode = null,
            string? specialTypeCode = null,
            string? levelCode = null,
            string? doseFormCode = null,
            string? specification = null,
            string? baseUnitCode = null,
            string? clinicSaleUnitCode = null,
            decimal? clinicSaleVolumeMin = null,
            decimal? clinicSaleVolumeMax = null,
            string? inpatientSaleUnitCode = null,
            string? inpatientSaleVolume = null,
            string? transportUnitCode = null,
            string? transportVolume = null,
            string? defaultDoseUnitCode = null,
            decimal? defultDoseVolumeMin = null,
            decimal? defultDoseVolumeMax = null,
            string? secondDoseUnitCode = null,
            decimal? secondDoseVolumeMin = null,
            decimal? secondDoseVolumeMax = null,
            decimal? retailPriceMin = null,
            decimal? retailPriceMax = null,
            string? defaultUsageCode = null,
            string? defaultFrequencyCode = null,
            decimal? defaultDoseVolumeMin = null,
            decimal? defaultDoseVolumeMax = null,
            string? skinTestFlag = null,
            string? skinTestNeedFlag = null,
            string? skinTestTypeFlag = null,
            string? skinTestCode = null,
            CancellationToken cancellationToken = default);
        Task<List<Medication>> GetListAsync(
                    string? filterText = null,
                    string? code = null,
                    string? statusCode = null,
                    string? keyWord = null,
                    string? productName = null,
                    string? productNamePY = null,
                    string? productNameWB = null,
                    string? productNameEN = null,
                    string? alias = null,
                    string? aliasPY = null,
                    string? aliasWB = null,
                    string? aliasEN = null,
                    string? scientificName = null,
                    string? scientificNamePY = null,
                    string? scientificNameWB = null,
                    string? scientificNameEN = null,
                    string? antiLevelCode = null,
                    string? antiClassCode1 = null,
                    string? antiClassCode2 = null,
                    string? anitDDDUnitCode = null,
                    decimal? anitDDDValueMin = null,
                    decimal? anitDDDValueMax = null,
                    decimal? antiOnceMinValueMin = null,
                    decimal? antiOnceMinValueMax = null,
                    decimal? antiOnceMaxValueMin = null,
                    decimal? antiOnceMaxValueMax = null,
                    string? antiOnceUnitCode = null,
                    int? antiFrequencyMinMin = null,
                    int? antiFrequencyMinMax = null,
                    int? antiFrequencyMaxMin = null,
                    int? antiFrequencyMaxMax = null,
                    string? gBCode = null,
                    string? typeCode = null,
                    string? classCode = null,
                    string? feeTypeCode = null,
                    string? specialTypeCode = null,
                    string? levelCode = null,
                    string? doseFormCode = null,
                    string? specification = null,
                    string? baseUnitCode = null,
                    string? clinicSaleUnitCode = null,
                    decimal? clinicSaleVolumeMin = null,
                    decimal? clinicSaleVolumeMax = null,
                    string? inpatientSaleUnitCode = null,
                    string? inpatientSaleVolume = null,
                    string? transportUnitCode = null,
                    string? transportVolume = null,
                    string? defaultDoseUnitCode = null,
                    decimal? defultDoseVolumeMin = null,
                    decimal? defultDoseVolumeMax = null,
                    string? secondDoseUnitCode = null,
                    decimal? secondDoseVolumeMin = null,
                    decimal? secondDoseVolumeMax = null,
                    decimal? retailPriceMin = null,
                    decimal? retailPriceMax = null,
                    string? defaultUsageCode = null,
                    string? defaultFrequencyCode = null,
                    decimal? defaultDoseVolumeMin = null,
                    decimal? defaultDoseVolumeMax = null,
                    string? skinTestFlag = null,
                    string? skinTestNeedFlag = null,
                    string? skinTestTypeFlag = null,
                    string? skinTestCode = null,
                    string? sorting = null,
                    int maxResultCount = int.MaxValue,
                    int skipCount = 0,
                    CancellationToken cancellationToken = default
                );

        Task<long> GetCountAsync(
            string? filterText = null,
            string? code = null,
            string? statusCode = null,
            string? keyWord = null,
            string? productName = null,
            string? productNamePY = null,
            string? productNameWB = null,
            string? productNameEN = null,
            string? alias = null,
            string? aliasPY = null,
            string? aliasWB = null,
            string? aliasEN = null,
            string? scientificName = null,
            string? scientificNamePY = null,
            string? scientificNameWB = null,
            string? scientificNameEN = null,
            string? antiLevelCode = null,
            string? antiClassCode1 = null,
            string? antiClassCode2 = null,
            string? anitDDDUnitCode = null,
            decimal? anitDDDValueMin = null,
            decimal? anitDDDValueMax = null,
            decimal? antiOnceMinValueMin = null,
            decimal? antiOnceMinValueMax = null,
            decimal? antiOnceMaxValueMin = null,
            decimal? antiOnceMaxValueMax = null,
            string? antiOnceUnitCode = null,
            int? antiFrequencyMinMin = null,
            int? antiFrequencyMinMax = null,
            int? antiFrequencyMaxMin = null,
            int? antiFrequencyMaxMax = null,
            string? gBCode = null,
            string? typeCode = null,
            string? classCode = null,
            string? feeTypeCode = null,
            string? specialTypeCode = null,
            string? levelCode = null,
            string? doseFormCode = null,
            string? specification = null,
            string? baseUnitCode = null,
            string? clinicSaleUnitCode = null,
            decimal? clinicSaleVolumeMin = null,
            decimal? clinicSaleVolumeMax = null,
            string? inpatientSaleUnitCode = null,
            string? inpatientSaleVolume = null,
            string? transportUnitCode = null,
            string? transportVolume = null,
            string? defaultDoseUnitCode = null,
            decimal? defultDoseVolumeMin = null,
            decimal? defultDoseVolumeMax = null,
            string? secondDoseUnitCode = null,
            decimal? secondDoseVolumeMin = null,
            decimal? secondDoseVolumeMax = null,
            decimal? retailPriceMin = null,
            decimal? retailPriceMax = null,
            string? defaultUsageCode = null,
            string? defaultFrequencyCode = null,
            decimal? defaultDoseVolumeMin = null,
            decimal? defaultDoseVolumeMax = null,
            string? skinTestFlag = null,
            string? skinTestNeedFlag = null,
            string? skinTestTypeFlag = null,
            string? skinTestCode = null,
            CancellationToken cancellationToken = default);
    }
}